www.gusucode.com > VC 2D游戏编辑器-源码程序 > VC 2D游戏编辑器-源码程序/code/mapedit_source/dialog/ToolDlg.cpp
//Download by http://www.NewXing.com // ToolDlg.cpp : implementation file // #include "stdafx.h" #include "..\\MapEdit.h" #include "ToolDlg.h" #include "..\\Ddfunc.h" #include "..\\MapEditView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif WORD nCurrentTab; //当前资源所在的Tab WORD nSelPic; //选择的资源 int izoom = 1; //全图显示放大的倍数 CView *pView; //指向MapEditView的指针 bool IsLButtonDown = false; //左键是否按下 bool IsZoomDown = false; //按下Zoom放大缩小按钮 RECT rShowPic; _SurfaceCell cSelSurface; _ObjCell cSelObj; char cPic_Path[MAX_PATH]; extern float fRealZoom; extern CString* cSourPath; extern CString* cObjPath[3]; extern int nSource; extern int nObj[3]; extern int SCREEN_WIDTH; extern int SCREEN_HEIGHT; extern CDdfunc GameDd; extern CPoint g_ptScrollPos; extern RECT client; extern bool IsFirstShowSPic; ///////////////////////////////////////////////////////////////////////////// // CToolDlg dialog CToolDlg::CToolDlg(CWnd* pParent /*=NULL*/) : CDialog(CToolDlg::IDD, pParent) { //{{AFX_DATA_INIT(CToolDlg) //}}AFX_DATA_INIT m_imageList=new CImageList; nCurrentTab=0; } void CToolDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CToolDlg) DDX_Control(pDX, IDC_MOUSE_POINT, m_mouse_point); DDX_Control(pDX, IDC_MAP_SIZE, m_map_size); DDX_Control(pDX, IDC_SMALLPIC, m_smallpic); DDX_Control(pDX, IDC_TAB, m_Tab); DDX_Control(pDX, IDC_PIC_LIST, m_List); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CToolDlg, CDialog) //{{AFX_MSG_MAP(CToolDlg) ON_NOTIFY(TCN_SELCHANGE, IDC_TAB, OnSelchangeTab) ON_NOTIFY(LVN_ITEMCHANGED, IDC_PIC_LIST, OnItemchangedPicList) ON_WM_DESTROY() ON_WM_PAINT() ON_BN_CLICKED(IDC_ZOOMUP, OnZoomup) ON_BN_CLICKED(IDC_ZOOMDOWN, OnZoomdown) ON_WM_LBUTTONDOWN() ON_WM_MOUSEMOVE() ON_WM_LBUTTONUP() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CToolDlg message handlers //当Tab有变化时,相应改变资源列表 void CToolDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here int i; ClearListItem(); if(m_Tab.GetCurSel() == 0) { for (i=0;i<nSource;i++) LoadListItem(i,cSourPath[i]); } else if(m_Tab.GetCurSel() == 1) { for (i=0;i<nObj[0];i++) LoadListItem(i,cObjPath[0][i]); } else if(m_Tab.GetCurSel() == 2) { for (i=0;i<nObj[1];i++) LoadListItem(i,cObjPath[1][i]); } else if(m_Tab.GetCurSel() == 3) { for (i=0;i<nObj[2];i++) LoadListItem(i,cObjPath[2][i]); } *pResult = 0; } //初始化工具对话框 BOOL CToolDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here TC_ITEM *m_pTCItem; m_pTCItem = new TC_ITEM; m_pTCItem->mask = TCIF_TEXT; m_pTCItem->pszText = "地板"; m_Tab.InsertItem(0, m_pTCItem); m_pTCItem->pszText = "静态"; m_Tab.InsertItem(1, m_pTCItem); m_pTCItem->pszText = "动态"; m_Tab.InsertItem(2, m_pTCItem); m_pTCItem->pszText = "转变"; m_Tab.InsertItem(3, m_pTCItem); CSize sz(70,60); m_List.SetIconSpacing(sz); m_List.SetBkColor(RGB(255,255,255)); m_imageList->Create(32, 32, ILC_COLOR24 , 0, 128); m_List.SetImageList(m_imageList,LVSIL_NORMAL); GetCurrentDirectory(MAX_PATH,cPic_Path); int i; for (i=0;i<nSource;i++) LoadListItem(i, cSourPath[i]); nSelPic = 0; nCurrentTab = 0; cSelSurface.nID = 0; cSelSurface.nHeight = 0; cSelSurface.nPass = 1; cSelSurface.nEventType = 0; cSelSurface.nEvent = 0; GetDlgItem(IDC_SMALLPIC)->GetClientRect(&rShowPic); GameDd.InitDirectDraw(m_hWnd); GameDd.GameMap.ResizeMap(32,32, cSelSurface); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } //添加资源列表项目 void CToolDlg::LoadListItem(int nItem, CString str) { CBitmap *bmp; HBITMAP hp; int i=0,j=0,k=0; char filename[32]; char result[MAX_PATH]; strcpy(result, cPic_Path); strcat(result,"\\resource\\"); i = str.Find('\\', 0); for(k = 0; k <= i; k++) filename[k] = str[k]; filename[k] = '\0'; strcat(result,filename); itoa(nItem,filename,10); strcat(result,filename); strcat(result,".bmp"); hp=(HBITMAP)LoadImage( NULL, result, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); bmp=CBitmap::FromHandle(hp); m_imageList->Add(bmp, RGB(0, 0, 0)); i ++; while(str[i] != '.') filename[j++] = str[i++]; filename[j] = '\0'; int h = m_imageList->GetImageCount(); m_List.InsertItem(nItem,filename,m_imageList->GetImageCount()-1); } //清楚资源列表项目 void CToolDlg::ClearListItem() { if (m_imageList) { delete m_imageList; m_imageList = NULL; } m_imageList=new CImageList; m_imageList->Create(32, 32, ILC_COLOR24 , 0, 128); m_List.SetImageList(m_imageList,LVSIL_NORMAL); m_List.DeleteAllItems(); } //当选择资源时,处理所选的资源 void CToolDlg::OnItemchangedPicList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here CListCtrl *pList = (CListCtrl *)GetDlgItem(IDC_PIC_LIST); int nSelected = pNMListView->iItem; if(nSelected >= 0) { nSelPic = nSelected; nCurrentTab = m_Tab.GetCurSel(); } if(nCurrentTab == 0) { cSelSurface.nID = nSelected; cSelSurface.nHeight = 0; cSelSurface.nPass = 1; cSelSurface.nEvent = 0; cSelSurface.nEventType = 0; cSelSurface.nUseTranSition = 1; cSelSurface.res = 0; } else { cSelObj.nID = nSelected; cSelObj.nRealY = 0; cSelObj.nType = nCurrentTab; cSelObj.res = 0; } *pResult = 0; ((CMapEditView*)pView)->InvalidateRect(NULL,false); } void CToolDlg::OnDestroy() { CDialog::OnDestroy(); // TODO: Add your message handler code here if (m_imageList) delete m_imageList; } void CToolDlg::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here GetDlgItem(IDC_PIC_LIST)->ShowWindow(SW_SHOW); // Do not call CDialog::OnPaint() for painting messages } void CToolDlg::OnZoomup() { // TODO: Add your control notification handler code here if(fRealZoom > 2) izoom *= 2; IsZoomDown = true; IsFirstShowSPic = true; ((CMapEditView*)pView)->InvalidateRect(&rShowPic); } void CToolDlg::OnZoomdown() { // TODO: Add your control notification handler code here if(izoom > 1) izoom /= 2; IsZoomDown = true; IsFirstShowSPic = true; ((CMapEditView*)pView)->InvalidateRect(&rShowPic); } void CToolDlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CPoint cClientCenterPoint; RECT rect = GameDd.GetSrect( ); if((point.x>8)&&(point.x<rShowPic.right+8)&&(point.y>8)&&(point.y<rShowPic.bottom+8)) { cClientCenterPoint.x = (long)((point.x-8)*fRealZoom-client.right/2+rect.left); if(cClientCenterPoint.x < 0) cClientCenterPoint.y = 0; cClientCenterPoint.y = (long)((point.y-8)*fRealZoom-client.bottom/2+rect.top); if(cClientCenterPoint.y < 0) cClientCenterPoint.y = 0; ((CMapEditView*)pView)->ScrollToPosition(cClientCenterPoint); ((CMapEditView*)pView)->InvalidateRect(&rShowPic); } IsLButtonDown = true; CDialog::OnLButtonDown(nFlags, point); } void CToolDlg::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CPoint cClientCenterPoint; RECT rect = GameDd.GetSrect( ); if(IsLButtonDown) { if((point.x>8)&&(point.x<rShowPic.right+8)&&(point.y>8)&&(point.y<rShowPic.bottom+8)) { cClientCenterPoint.x = (long)((point.x-8)*fRealZoom-client.right/2+rect.left); if(cClientCenterPoint.x < 0) cClientCenterPoint.y = 0; cClientCenterPoint.y = (long)((point.y-8)*fRealZoom-client.bottom/2+rect.top); if(cClientCenterPoint.y < 0) cClientCenterPoint.y = 0; ((CMapEditView*)pView)->ScrollToPosition(cClientCenterPoint); ((CMapEditView*)pView)->InvalidateRect(&rShowPic); } } CDialog::OnMouseMove(nFlags, point); } void CToolDlg::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default IsLButtonDown = false; CDialog::OnLButtonUp(nFlags, point); }